A lightweight implementation of generics and dynamics